#include "logrecord.h"
#include "ui_logrecord.h"
#include<qdebug.h>
Q_GLOBAL_STATIC(LogRecord,theInstance);
LogRecord::LogRecord(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::LogRecord)
{
    ui->setupUi(this);
    this->setWindowTitle("日志信息界面");
    this->setWindowIcon(QIcon(":res/res/Log.ico"));
    ui->plainTextEditLogRecord->setFont(QFont("Microsoft YaHei", 14));
}

LogRecord *LogRecord::instance()
{
    return theInstance;
}

bool LogRecord::writeLogRecord(QString Information,QString userName,QString userType)
{
    QFile file(LogRecordWorkPlace::LOG_FILE);
    QString log = QString(">> [%1]---%2---%3---%4 \n")
        .arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss.zzz"))
        .arg(Information).arg(userName).arg(userType);

    if (!file.open(QIODevice::WriteOnly | QIODevice::Append | QIODevice::Text))
    {
        qDebug()<<"打开文件失败";
        return false;
    }
    else
    {

        // 写入文件
           QTextStream stream(&file);
           stream.setCodec("UTF-8");
           stream << log;
           file.close();
           return true;


    }

}

void LogRecord::openLogFileExternal(const QString &filePath)
{

    // 检查文件是否存在
        if (!QFileInfo::exists(filePath)) {
            qWarning() << "日志文件不存在：" << filePath;
            return;
        }
 #if 1
        // 检查软件是否存在
           if (!QFileInfo::exists(LogRecordWorkPlace::programPath)) {
               qDebug() << "指定软件未安装或路径错误";
               return;
           }

           // 启动程序
           QProcess process;
           bool success = process.startDetached(LogRecordWorkPlace::programPath, {filePath});

           if (!success) {
               qDebug() << "启动失败，请检查权限或路径";
           }
#elif 0
        // 使用系统关联程序打开

        if (!QDesktopServices::openUrl(QUrl::fromLocalFile(filePath))) {
            qCritical() << "无法打开文件：" << filePath;
        }

#endif

}

bool LogRecord::writePlainTextEdit(const QString &filePath)
{
    ui->plainTextEditLogRecord->clear();//清空上一次显示的日志信息
    QFile file(filePath);
    if (!file.open(QIODevice::ReadOnly | QIODevice::Append | QIODevice::Text))
    {
        qDebug()<<"打开文件失败";
        return false;
    }
    else
    {

 #if 1
                file.flush();
                file.seek(0); // 关键！将指针移回文件开头
               // 读取内容
                QTextStream in(&file);
                in.setCodec("UTF-8"); // 设置编码
                QString content = in.readAll();
                qDebug()<<"content "<<content ;
                file.close();
                // 显示内容

               ui->plainTextEditLogRecord->appendPlainText(content);
#elif 0
          QTextStream in(&file);
          QString buffer;
          qDebug()<<"in->buffer";
          // 分块读取（每次读取 4KB）
          while (!in.atEnd())
          {
              buffer = in.read(4096); // 4KB per chunk
              qDebug()<<"buffer"<<buffer;
              ui->plainTextEditLogRecord->appendPlainText(buffer);
              QApplication::processEvents(); // 保持界面响应
          }

          file.close();
#elif 0
            QTextStream in(&file);
            in.setCodec("UTF-8"); // Qt5 设置编码 | Qt6 使用 setEncoding(QStringConverter::Utf8)

            while (!in.atEnd()) {
                QString line = in.readLine(); // 读取一行（自动去除换行符）
                qDebug() << "读取行内容:" << line;

                // 在这里处理每一行内容（例如添加到界面）
                 ui->plainTextEditLogRecord->appendPlainText(line);
            }

            file.close();

#endif
    }


   return true;

}

LogRecord::~LogRecord()
{
    delete ui;
}

void LogRecord::on_pushButtonClose_clicked()
{
this->close();
}


void LogRecord::on_pushButtonOpenLogFile_clicked()
{
  openLogFileExternal();//打开日志文件
}

